package cn.fengzhilun.javase.day02;

import java.util.Arrays;

import org.junit.Test;

public class Exercise {
	public static void main(String[] args) {
		int[] a1 = {1, 5, 16}, a2 = {3, 4, 6, 7};
		System.out.println(merge(a1,a2));
	}
    
//        public static void main(String[] args) {
//          //print(1234);
//          int x = 85;//输出能被 85 整除的所有的数；
//          for (int i = 2; i < x; i++) {
//            if (x % i == 0) {
//              System.out.print(i + " ");
//              continue;
//            }
//          }
//          int m = 10;
//          do { 
//          	System.out.println(m);
//          } while(--m > 10);

       // }
@Test
public void test() {
	System.out.println(sumDigits(1234));
	//testMonth();
		double[][] matrix = {
				{ 1.5, 2, 3, 4 },
				{ 2.3, 5, 8, 9 },
				{ 3, 5.4, 7, 10 } };
//System.out.println(	sumColumn(matrix,0));
//System.out.println(	sumColumn(matrix,1));
//System.out.println(	sumColumn(matrix,2));
//Arrays.toString(sumColumns(matrix));
int[] a1 = {1, 5, 16}, a2 = {3, 4, 6, 7};
System.out.println(merge(a1,a2));
}
        public static void print(int n) {
          while (n != 0) {
            System.out.print(n % 10);
            n = n / 10;
          }
        } 
 /*12.	【随机月份】编程随机产生一个[1, 12]之间的整数，根据数字打印相应的中文月份：一月，二月，。。。十二月。
比如，如果随机数是3，则打印三月。
不要使用if和switch语句。提示：可以使用数组来保存中文月份。
*/
        
public void testMonth() {
	String [] a={"一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"};
	int num=(int )(Math.random()*12);
	System.out.println(a[num]);
}
        public static int sumDigits (long n) {
        	int sum = 0;
        	while(n>0) {
        		sum+=(int) (n%10);
        		n=n/10;
        	}
        	
        	return sum;
        }
   /*14. 编写一个方法，合并两个数组（两个数组已经是升序排序的），返回一个新的升序排序的数组。使用下面的方法定义：
public static int[] merge(int[] a1, int[] a2);
例如：int[] a1 = {1, 5, 16}, a2 = {3, 4, 6, 7};
merge(a1, a2)返回{1, 3, 4, 5, 6, 7, 16}
*/    
        public static int[] merge(int[] a1, int[] a2) {
        	int n1= a1.length;
        	int n2=a2.length;
        	int i=0,j=0,k=0;
        	int num[]= new int[n1+n2];
        	while (i<n1&&j<n2) {
        		if(a1[i]<a2[j]) {
        			num[k]=a1[i];
        			k++;
        			i++;
        		}else if(a1[i]==a2[j]) {
        			num[k]=a1[i];
        			k++;
        			i++;
        		}else {
        			num[k]=a2[i];
        			k++;
        			i++;
        		}
        		
        	}
        while(i<n1) {
        	num[k]=a1[i];
        	k++;
        	i++;
        }			
        while(j<n2) {
        	num[k]=a2[j];
        	k++;
        	i++;
        }		
        	
        	
        	System.out.println(Arrays.toString(num));
			return  num;
        }  
        /*第一列之和为6.8， 第二列之和为11，第三列之和为18
方法定义如下：
public static double sumColumn(double[][] matrix, int column)；
那么调用sumColumn(matrix, 0) 返回6.8，调用sumColumn(matrix, 1)返回11。调用sumColumn(matrix, 2)返回18。
*/
        public static double sumColumn(double[][] matrix, int column) {
        	double sum = 0;
        	if(column>matrix.length-1) {
        		System.out.println("数组超出长度");
        		return -1;
        		
        	}
        	for(int i=0;i<matrix[column].length-1;i++) {
        		sum+=matrix[i][column];
        		
        	}

        	
        	return sum;
        }  
      /*16.	 改进上题方法，求矩阵各列元素之和。方法定义如下：
public static double[] sumColumns(double[][] matrix)；
对于上题的例子，调用sumColumns(matrix)应该返回{6.8, 11, 18, 23};
*/  
        public static double[] sumColumns(double[][] matrix) {
        	
        	int temp= matrix[0].length;
        	double [] a=new double[temp];
        	for(int j=0;j<temp;j++) {
        		double sum=0;
        	for(int i=0;i<matrix.length;i++) {
        		
        		sum+=matrix[i][j];
        		//System.out.println("j="+j+" i="+i);
        		
        	}
        	//System.out.println(sum);
        	a[j]=sum;
        	}
        	return a;
        }      
}
